package com.googlecode.simpleqms

class ProjectService {
    static transactional = true

    def getList(params) {
        def projectDivision = Division.get(params.get('divisionId').trim())
        return Project.findAllByDivision(projectDivision).collect {
            [
                    id: "Proj_${it.id}",
                    text: it.name,
					iconCls: 'proj_icon'
            ]
        }
    }

    def getAllProjects = {
        return Project.list().collect {
            [
                    id: it.id,
                    data: (it.name + ' ' + it.description ?: '').trim()
            ]
        }
    }

    def getElement(params) {
        def project = Project.get(params.get('projectId').trim())
        return [
                id: project.id,
                type: 'project',
                name: project.name,
                description: project.description,
                division: project.division.name
        ]
    }

    def addElement(params) {
        def division = Division.get(params.get("divisionId").trim())
        def newProject = new Project()

        for (Project proj : Project.list()) {
            if (proj.name.trim().equalsIgnoreCase(params.get('name-inputEl').trim()))
                return ['success': false, 'message': 'Такой проект уже существует']
        }
        if (params.get('description-inputEl').trim().length() > 255)
            return ['success': false, 'message': 'Длина описания не может превышать 255 символов']

        newProject.name = params.get('name-inputEl').trim()
        newProject.description = params.get('description-inputEl').trim()
        newProject.division = division

        if (newProject.save())
            return ['success': true, 'message': "Проект <b>${newProject.name}</b> добавлен"]
        return ['success': false, 'message': 'Не удалось добавить новый проект']
    }

    def modElement(params) {
        def modProject = Project.get(params.get("projectId").trim())
        def final projectOldName = modProject.name

        for (Project proj : Project.list()) {
            if (proj.id == modProject.id) {
                if (proj.name.trim().equals(params.get('name-inputEl').trim()) &&
                        proj.description.trim().equals(params.get('description-inputEl').trim()))
                    return ['success': false, 'message': 'Ничего не изменилось']
            } else if (proj.name.trim().equalsIgnoreCase(params.get('name-inputEl').trim()))
                return ['success': false, 'message': 'Такой проект уже существует']
        }
        if (params.get('description-inputEl').trim().length() > 255)
            return ['success': false, 'message': 'Длина описания не может превышать 255 символов']

        modProject.name = params.get('name-inputEl').trim()
        modProject.description = params.get('description-inputEl').trim()

        if (modProject.save()) {
            def message = "Проект <b>${projectOldName}</b> изменен. Новое имя - <b>${modProject.name}</b>"
            if (modProject.name.equalsIgnoreCase(projectOldName))
                message = "Проект <b>${modProject.name}</b> изменен"
            return ['success': true, 'message': message]
        }
        return ['success': false, 'message': "Не удалось изменить проект <b>${projectOldName}</b>"]
    }

    def delElement(params) {
        def delProject = Project.get(params.get("projectId").trim())
        def final delProjectName = delProject.name
        def projectEmployees = Employee.findAllByProject(delProject)
        projectEmployees.each() { employee ->
            employee.delete()
        }
        if (delProject.delete())
            return ['success': true, 'message': "Проект <b>${delProjectName}</b> удален"]
        return ['success': false, 'message': "Не удалось удалить проект <b>${delProjectName}</b>"]
    }
}